package com.ruoyi.common.annotation;

import java.lang.annotation.*;

/**
 * 优化版唯一校验注解（Controller层）- MyBatis-Flex版本
 */
@Documented
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface CheckUnique {
    
    /**
     * 表名
     */
    String table();
    
    /**
     * 校验条件，支持 AND、OR 连接多个字段
     * 示例：
     * - "code"                         // 单个字段
     * - "code AND type"                // 多个字段 AND 关系  
     * - "code OR name"                 // 多个字段 OR 关系
     * - "code AND (type OR category)"  // 复杂条件
     */
    String where();
    
    /**
     * 排除的ID（更新时使用），支持：
     * - 字段名，如 "id"
     * - 空字符串表示不排除
     */
    String excludeId() default "id";
    
    /**
     * 错误消息
     */
    String message() default "数据已存在";
    
    /**
     * 逻辑删除条件(可选)
     * 默认："del_flag = 0" 逻辑删除
     * 示例："" 为物理删除
     */
    String logicDelete() default "del_flag=0";
}

///~ 使用示例
/*
1) 单个字段
 @CheckUnique(table = "t_bank", where = "bank_code", message = "银行编码")

2) 多个字段 or
 @CheckUnique(table = "t_bank", where = "bank_code or bank_name", message = "{bank_code:银行编码, bank_name:银行名称}")

2) 多个字段 and
 @CheckUnique(table = "t_bank", where = "bank_code and bank_name", message = "{bank_code:银行编码+银行名称组合}")







 */